# The list of subjects, the order of conditions, and the thresholds are derived from Subjects.xlsx
# Read in the Excel worksheet:
library(xlsx)
## Loading required package: rJava
## Warning: package 'rJava' was built under R version 3.2.3
## Loading required package: xlsxjars
library(ggplot2)
library(plyr)
library(matrixStats)
## Warning: package 'matrixStats' was built under R version 3.2.5
## matrixStats v0.50.2 (2016-04-24) successfully loaded. See ?matrixStats for help.
##
## Attaching package: 'matrixStats'
## The following object is masked from 'package:plyr':
##
## count
library(splines)
source('/Users/Egor/Dropbox/Prog/R/myFunctions/blackTheme.R')
## Warning: package 'gridExtra' was built under R version 3.2.4
dataDir <- '/Users/Egor/Dropbox/Projects/supr-eff/data/'
subjList <- read.xlsx(file=paste(dataDir,'Subjects.xlsx',sep=''), 1, colIndex=c(1:8), header=T)
subjList$Subj<- as.factor(subjList$Subj)
condList <- c('s1','s2','s3')
# dropSubjs <- c(2) # X[ ! X$Variable1 %in% c(11,12), ]
shortRT <- .5
outlFac <- 2.5 # outlier factor
# Gathering the directories from the data directory:
allDirs <- dir(dataDir)
# Setting variables for the loop:
ds <- data.frame()
allrts <- data.frame()
aarts <- data.frame()
rtds <- data.frame()
curSubj <- 1 #temp
curCond <- 1 #temp
for(curSubj in 1:length(subjList$Subj)){ #going through all dirs
for(curCond in 1:length(condList)){
grepPattern <- paste('dm_p-', subjList$Subj[curSubj], '_dom-', subjList$DomEye[curSubj],
'_', condList[curCond], '_t0_', sep='')
subjDir <- allDirs[grep(grepPattern, allDirs)]
# With this directory, extracting data:
subjDataFN <- paste(dataDir, subjDir, '/', subjDir, '_trials.tsv', sep='')
if(file.exists(subjDataFN)){
nConds <- 13
nc <- nConds-1 # the number of conditions without the blank
ss <- read.table(subjDataFN, sep='\t', nrows=nConds, header=T)
sumss <- ss[,1:27]
# Inserting subject ID and subject threshold
sumss$SubjID <- subjList$Subj[curSubj]
sumss$subjThresh <- subjList$subjThresh[curSubj]
# I can't take RT_mean, because it doesn't exclude zeros
# Need to get the RTs on my own, and since the nTrials might
# differ...
nTrials <- ss$n[1]
rts <- ss[,30:(29+nTrials)]
if(curCond==1){
allrts <- rts
}else{
allrts <- cbind(rts,allrts)
}
print(paste('Processed file',subjDataFN))
}else{
print(paste('File does not exist:',subjDataFN))
}
}
# Counting and removing RTs<shortRT and non-responses
sumss$cnt_RTshort <- c(rowSums(allrts[1:nc,]<shortRT),0)
sumss$cnt_RTna <- rowSums(allrts==0)
# Handling non-responses in two different ways: either equating them to 3s (max RT) or to NA
rt3 <- allrts
rt3[rt3==0] <- 3 #maximum rt
sumss$RT3_mean <- 0 # c(rowMeans(rt3[1:nc,],na.rm=T),0)
sumss$RT3_mean <- c(rowMeans(rt3[1:nc,],na.rm=T),0)
sumss$RT3_norm <- c(sumss$RT3_mean[1:nc]/mean(sumss$RT3_mean[1:nc],na.rm=T),0)
sumss$RT3_norm <- 0
sumss$RT3_norm[1:(nc/2)] <- sumss$RT3_mean[1:(nc/2)]/mean(sumss$RT3_mean[1:(nc/2)],na.rm=T)
sumss$RT3_norm[(nc/2+1):nConds] <- c(sumss$RT3_mean[(nc/2+1):nc]/mean(sumss$RT3_mean[(nc/2+1):nc],
na.rm=T),0)
# RTs with exclusions as NA:
rtna <- allrts
rtna[rtna==0] <- NA
rtna[rtna<shortRT] <- NA
# Dealing with the outliers:
sumss$RTna_mean <- c(rowMeans(rtna[1:nc,],na.rm=T),0)
sumss$RTna_median <- c(rowMedians(as.matrix(rtna[1:nc,]),na.rm=T),0)
sumss$RTna_sd <- c(apply(rtna[1:nc,],1,sd,na.rm=T),0)
sumss$RTna_outlLow <- rowSums(rtna<(sumss$RTna_mean-outlFac*sumss$RTna_sd), na.rm=T)
sumss$RTna_outlHigh <- rowSums(rtna>(sumss$RTna_mean+outlFac*sumss$RTna_sd), na.rm=T)
rtna[rtna<(sumss$RTna_mean-outlFac*sumss$RTna_sd)] <- NA
rtna[rtna>(sumss$RTna_mean+outlFac*sumss$RTna_sd)] <- NA
sumss$RTna_mean <- c(rowMeans(rtna[1:nc,],na.rm=T),0)
sumss$RTna_sd <- c(apply(rtna[1:nc,],1,sd,na.rm=T),0)
sumss$RTna_norm <- c(sumss$RTna_mean[1:nc]/mean(sumss$RTna_mean[1:nc],na.rm=T),0)
sumss$RTna_norm[1:(nc/2)] <- sumss$RTna_mean[1:(nc/2)]/mean(sumss$RTna_mean[1:(nc/2)],na.rm=T)
sumss$RTna_norm[(nc/2+1):nConds] <- c(sumss$RTna_mean[(nc/2+1):nc]/
mean(sumss$RTna_mean[(nc/2+1):nc], na.rm=T),0)
# Filling up aarts only after rtna has been cleaned up
if(curSubj==1){
aarts <- cbind(sumss,rtna)
}else{
aarts <- rbind(aarts,cbind(sumss,rtna))
}
# Binding the summary statistics with the empty data frame
ds <- rbind(ds, sumss)
rtds <- rbind(rtds,aarts)
}
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-0_dom-r_s1_t0_2016-04-29_1556/dm_p-0_dom-r_s1_t0_2016-04-29_1556_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-0_dom-r_s2_t0_2016-04-29_1607/dm_p-0_dom-r_s2_t0_2016-04-29_1607_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-0_dom-r_s3_t0_2016-04-29_1618/dm_p-0_dom-r_s3_t0_2016-04-29_1618_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-1_dom-r_s1_t0_2016-04-28_1413/dm_p-1_dom-r_s1_t0_2016-04-28_1413_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-1_dom-r_s2_t0_2016-04-28_1427/dm_p-1_dom-r_s2_t0_2016-04-28_1427_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-1_dom-r_s3_t0_2016-04-28_1439/dm_p-1_dom-r_s3_t0_2016-04-28_1439_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-2_dom-r_s1_t0_2016-04-28_1509/dm_p-2_dom-r_s1_t0_2016-04-28_1509_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-2_dom-r_s2_t0_2016-04-28_1519/dm_p-2_dom-r_s2_t0_2016-04-28_1519_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-2_dom-r_s3_t0_2016-04-28_1529/dm_p-2_dom-r_s3_t0_2016-04-28_1529_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-3_dom-r_s1_t0_2016-04-28_1630/dm_p-3_dom-r_s1_t0_2016-04-28_1630_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-3_dom-r_s2_t0_2016-04-28_1637/dm_p-3_dom-r_s2_t0_2016-04-28_1637_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-3_dom-r_s3_t0_2016-04-28_1645/dm_p-3_dom-r_s3_t0_2016-04-28_1645_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-4_dom-r_s1_t0_2016-04-28_1705/dm_p-4_dom-r_s1_t0_2016-04-28_1705_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-4_dom-r_s2_t0_2016-04-28_1714/dm_p-4_dom-r_s2_t0_2016-04-28_1714_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-4_dom-r_s3_t0_2016-04-28_1722/dm_p-4_dom-r_s3_t0_2016-04-28_1722_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-5_dom-r_s1_t0_2016-04-29_1518/dm_p-5_dom-r_s1_t0_2016-04-29_1518_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-5_dom-r_s2_t0_2016-04-29_1527/dm_p-5_dom-r_s2_t0_2016-04-29_1527_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-5_dom-r_s3_t0_2016-04-29_1536/dm_p-5_dom-r_s3_t0_2016-04-29_1536_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-6_dom-r_s1_t0_2016-04-29_1640/dm_p-6_dom-r_s1_t0_2016-04-29_1640_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-6_dom-r_s2_t0_2016-04-29_1648/dm_p-6_dom-r_s2_t0_2016-04-29_1648_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-6_dom-r_s3_t0_2016-04-29_1659/dm_p-6_dom-r_s3_t0_2016-04-29_1659_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-7_dom-r_s1_t0_2016-05-02_1026/dm_p-7_dom-r_s1_t0_2016-05-02_1026_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-7_dom-r_s2_t0_2016-05-02_1036/dm_p-7_dom-r_s2_t0_2016-05-02_1036_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-7_dom-r_s3_t0_2016-05-02_1044/dm_p-7_dom-r_s3_t0_2016-05-02_1044_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-8_dom-r_s1_t0_2016-05-02_1410/dm_p-8_dom-r_s1_t0_2016-05-02_1410_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-8_dom-r_s2_t0_2016-05-02_1418/dm_p-8_dom-r_s2_t0_2016-05-02_1418_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-8_dom-r_s3_t0_2016-05-02_1426/dm_p-8_dom-r_s3_t0_2016-05-02_1426_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-9_dom-r_s1_t0_2016-05-05_1209/dm_p-9_dom-r_s1_t0_2016-05-05_1209_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-9_dom-r_s2_t0_2016-05-05_1217/dm_p-9_dom-r_s2_t0_2016-05-05_1217_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-9_dom-r_s3_t0_2016-05-05_1223/dm_p-9_dom-r_s3_t0_2016-05-05_1223_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-10_dom-r_s1_t0_2016-05-05_1314/dm_p-10_dom-r_s1_t0_2016-05-05_1314_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-10_dom-r_s2_t0_2016-05-05_1322/dm_p-10_dom-r_s2_t0_2016-05-05_1322_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-10_dom-r_s3_t0_2016-05-05_1330/dm_p-10_dom-r_s3_t0_2016-05-05_1330_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-11_dom-r_s1_t0_2016-05-05_1401/dm_p-11_dom-r_s1_t0_2016-05-05_1401_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-11_dom-r_s2_t0_2016-05-05_1409/dm_p-11_dom-r_s2_t0_2016-05-05_1409_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-11_dom-r_s3_t0_2016-05-05_1416/dm_p-11_dom-r_s3_t0_2016-05-05_1416_trials.tsv"
ds$maskSpeed <- as.factor(ds$maskSpeed)
ds$targSpeed <- as.factor(ds$targSpeed)
ds <- ds[ds$targSpeed!=0,]
# Splitting subjects into high- and low-threshold pools:
subjTl <- subjList$Subj[subjList$subjThresh<1]
subjTh <- subjList$Subj[subjList$subjThresh>1]
dsTl <- ds[ds$SubjID %in% subjTl,]
dsTh <- ds[ds$SubjID %in% subjTh,]
# Line plots for non-broken trials:
ggplot(subjList, aes(x=Subj, y=subjThresh, fill=Subj)) + geom_bar(stat='identity') +
theme(legend.position='none') + labs(x='Subject ID', y='Subject Threshold') +
theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
# Line plots for non-broken trials:
ggplot(ds[ds$targSpeed==1,], aes(x=maskSpeed, y=cnt_RTna/24, group=SubjID, colour=SubjID)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
y='Number of non-breaking trials') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds[ds$targSpeed==5,], aes(x=maskSpeed, y=cnt_RTna/24, group=SubjID, colour=SubjID)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
y='Number of non-breaking trials') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Mean non-breaking trials`=mean(cnt_RTna/24))
ggplot(ss, aes(x=maskSpeed, y=`Mean non-breaking trials`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds[ds$targSpeed==1,], aes(x=maskSpeed, y=RTna_sd, group=SubjID, colour=SubjID)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
y='RT standard deviation') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 1 rows containing missing values (geom_point).
ggplot(ds[ds$targSpeed==5,], aes(x=maskSpeed, y=RTna_sd, group=SubjID, colour=SubjID)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
y='RT standard deviation') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds[ds$targSpeed==1,], aes(x=SubjID, y=RTna_outlLow, fill=SubjID)) +
geom_bar(stat='identity') + labs(x='Subject ID',y='Low outlier count') +
theme(legend.position='none') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds[ds$targSpeed==5,], aes(x=SubjID, y=RTna_outlLow, fill=SubjID)) +
geom_bar(stat='identity') + labs(x='Subject ID',y='Low outlier count') +
theme(legend.position='none') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds[ds$targSpeed==1,], aes(x=SubjID, y=RTna_outlHigh, fill=SubjID)) +
geom_bar(stat='identity') + labs(x='Subject ID',y='High outlier count') +
theme(legend.position='none') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds[ds$targSpeed==5,], aes(x=SubjID, y=RTna_outlHigh, fill=SubjID)) +
geom_bar(stat='identity') + labs(x='Subject ID',y='High outlier count') +
theme(legend.position='none') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
# Line plots of raw RTs per subject
ggplot(ds[ds$targSpeed==1,], aes(x=maskSpeed, y=RTna_mean, group=SubjID, colour=SubjID)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
y='Mean RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds[ds$targSpeed==5,], aes(x=maskSpeed, y=RTna_mean, group=SubjID, colour=SubjID)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
y='Mean RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
# Line plots of normalized RTs
ggplot(ds[ds$targSpeed==1,], aes(x=maskSpeed, y=RTna_norm, group=SubjID, colour=SubjID)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
y='Normalized RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds[ds$targSpeed==5,], aes(x=maskSpeed, y=RTna_norm, group=SubjID, colour=SubjID)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
y='Normalized RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds, aes(x=maskSpeed, y=RTna_mean, colour=targSpeed)) + geom_boxplot() +
labs(x='Mask Speed', colour='Target Speed', y='Mean RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds, aes(x=maskSpeed, y=RTna_norm, colour=targSpeed)) + geom_boxplot() +
labs(x='Mask Speed', colour='Target Speed', y='Normalized RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(dsTl, aes(x=maskSpeed, y=RTna_mean, colour=targSpeed)) + geom_boxplot() +
labs(x='Mask Speed', colour='Target Speed', y='Mean RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(dsTl, aes(x=maskSpeed, y=RTna_norm, colour=targSpeed)) + geom_boxplot() +
labs(x='Mask Speed', colour='Target Speed', y='Normalized RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Mean RT`=mean(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Mean RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ggplot(ds, aes(x=maskSpeed, y=RTna_mean, colour=targSpeed, group=targSpeed)) +
stat_smooth(method='lm', formula=y~ns(x,3), aes(fill=targSpeed)) +
labs(x='Mask Speed', y='Mean RT', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Mean Normalized RT`=mean(RTna_norm))
ggplot(ss, aes(x=maskSpeed, y=`Mean Normalized RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Median RT`=mean(RTna_median))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Median RT`=median(RTna_median))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Median RT`=median(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Median Normalized RT`=median(RTna_norm))
ggplot(ss, aes(x=maskSpeed, y=`Median Normalized RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Median RT`=mean(RTna_median))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Median RT`=median(RTna_median))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Median RT`=median(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Mean RT`=mean(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Mean RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Mean Normalized RT`=mean(RTna_norm))
ggplot(ss, aes(x=maskSpeed, y=`Mean Normalized RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(dsTh, .(maskSpeed,targSpeed), summarise, `Mean RT`=mean(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Mean RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
ss = ddply(dsTh, .(maskSpeed,targSpeed), summarise, `Mean Normalized RT`=mean(RTna_norm))
ggplot(ss, aes(x=maskSpeed, y=`Mean Normalized RT`, colour=targSpeed, group=targSpeed)) +
geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
# Loading libraries
library(lme4)
## Warning: package 'lme4' was built under R version 3.2.3
## Loading required package: Matrix
library(reshape)
##
## Attaching package: 'reshape'
## The following object is masked from 'package:Matrix':
##
## expand
## The following objects are masked from 'package:plyr':
##
## rename, round_any
# Preparing the data set...
# Creating character strings for naming the trials:
rtss <- rtds
trialColNames <- paste('t',as.character(c(1:24)),sep='')
colnames(rtss)[(length(rtss)-24):(length(rtss))] <- trialColNames
## Warning in colnames(rtss)[(length(rtss) - 24):(length(rtss))] <-
## trialColNames: number of items to replace is not a multiple of replacement
## length
# Melting the data set to have a trial per row:
md <- melt(rtss, id=c('SubjID','subjThresh','targSpeed','maskSpeed'),measure.vars=trialColNames)
md <- md[md$targSpeed!=0,] # deleting blank trials
rownames(md)=NULL
# Renaming the variables for trial and RT:
md <- rename(md,c('variable'='trial','value'='RT'))
# Renaming the trial variables to trial number:
# nSubj <- 8
# md$trial <- rep(c(1:24),each=48*nSubj)
md$trial <- as.numeric(substr(as.character(md$trial),2,3))
ggplot(md, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +
stat_smooth(method='lm', formula=y~ns(x,3)) +
labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 2828 rows containing non-finite values (stat_smooth).
ggplot(md, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +
stat_smooth(method='lm', formula=y~ns(x,3)) + geom_point() +
labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 2828 rows containing non-finite values (stat_smooth).
## Warning: Removed 2828 rows containing missing values (geom_point).
ggplot(md, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +
stat_smooth(method='lm', formula=y~ns(x,4)) +
labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 2828 rows containing non-finite values (stat_smooth).
ssTl <- md[md$SubjID %in% subjTl,]
ssTh <- md[md$SubjID %in% subjTh,]
ggplot(ssTl, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +
stat_smooth(method='lm', formula=y~ns(x,4)) +
labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 1252 rows containing non-finite values (stat_smooth).
ggplot(md, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +
stat_smooth(method='lm', formula=y~ns(x,5)) +
labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 2828 rows containing non-finite values (stat_smooth).
Running a simple linear model reveals an effect of target speed, but not the mask speed or the interaction between mask and target speed. The main effect of mask speed does, however, approach significance.
# Running the simplest model
m1 <- lmer(RT~maskSpeed*targSpeed+(1|SubjID), md)
anova(m1)
## Analysis of Variance Table
## Df Sum Sq Mean Sq F value
## maskSpeed 1 58.260 58.260 338.08
## targSpeed 1 28.386 28.386 164.72
## maskSpeed:targSpeed 1 6.726 6.726 39.03
summary(m1)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ maskSpeed * targSpeed + (1 | SubjID)
## Data: md
##
## REML criterion at convergence: 21314.2
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.9185 -0.6188 -0.0457 0.6079 3.9802
##
## Random effects:
## Groups Name Variance Std.Dev.
## SubjID (Intercept) 0.1332 0.3650
## Residual 0.1723 0.4151
## Number of obs: 19636, groups: SubjID, 12
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.8433234 0.1058044 17.422
## maskSpeed -0.0099074 0.0021010 -4.715
## targSpeed -0.0073055 0.0024043 -3.038
## maskSpeed:targSpeed -0.0035323 0.0005654 -6.247
##
## Correlation of Fixed Effects:
## (Intr) mskSpd trgSpd
## maskSpeed -0.068
## targSpeed -0.073 0.667
## mskSpd:trgS 0.057 -0.843 -0.785
2 * (1 - pnorm(abs(data.frame(coef(summary(m1)))$t.value))) # approx p's
## [1] 0.000000e+00 2.411306e-06 2.377841e-03 4.173524e-10
The above findings remain in place when the models including target and mask speeds (as well as their interaction) are compared against models containing only the nuisance variables (subject’s individual threshold and the trial number).
# Nuisance variable model with trial and subjThresh
mn <- lmer(RT~subjThresh+trial+(1|SubjID), md)
anova(mn)
## Analysis of Variance Table
## Df Sum Sq Mean Sq F value
## subjThresh 1 7.608 7.608 45.259
## trial 1 176.051 176.051 1047.345
summary(mn)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ subjThresh + trial + (1 | SubjID)
## Data: md
##
## REML criterion at convergence: 20791
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.6504 -0.6505 -0.0839 0.6019 4.2414
##
## Random effects:
## Groups Name Variance Std.Dev.
## SubjID (Intercept) 0.02678 0.1637
## Residual 0.16809 0.4100
## Number of obs: 19636, groups: SubjID, 12
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.9864411 0.0774061 25.66
## subjThresh -0.4345459 0.0653322 -6.65
## trial 0.0137051 0.0004235 32.36
##
## Correlation of Fixed Effects:
## (Intr) sbjThr
## subjThresh -0.788
## trial -0.069 0.002
2 * (1 - pnorm(abs(data.frame(coef(summary(mn)))$t.value))) # approx p's
## [1] 0.00000e+00 2.90461e-11 0.00000e+00
# Effects of mask speed and target speed:
mp_m <- lmer(RT~subjThresh+trial+maskSpeed+(1|SubjID), md)
mp_t <- lmer(RT~subjThresh+trial+targSpeed+(1|SubjID), md)
mp_mpt <- lmer(RT~subjThresh+trial+maskSpeed+targSpeed+(1|SubjID), md)
anova(mp_m,mp_mpt) # effect of target speed
## refitting model(s) with ML (instead of REML)
## Data: md
## Models:
## mp_m: RT ~ subjThresh + trial + maskSpeed + (1 | SubjID)
## mp_mpt: RT ~ subjThresh + trial + maskSpeed + targSpeed + (1 | SubjID)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mp_m 6 20425 20472 -10206 20413
## mp_mpt 7 20243 20298 -10114 20229 184.29 1 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mp_t,mp_mpt) # effect of mask speed
## refitting model(s) with ML (instead of REML)
## Data: md
## Models:
## mp_t: RT ~ subjThresh + trial + targSpeed + (1 | SubjID)
## mp_mpt: RT ~ subjThresh + trial + maskSpeed + targSpeed + (1 | SubjID)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mp_t 6 20607 20654 -10298 20595
## mp_mpt 7 20243 20298 -10114 20229 366.32 1 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Effects of target and mask speed (testing interaction)
mp_mxt <- lmer(RT~subjThresh+trial+maskSpeed*targSpeed+(1|SubjID), md)
anova(mp_mpt,mp_mxt)
## refitting model(s) with ML (instead of REML)
## Data: md
## Models:
## mp_mpt: RT ~ subjThresh + trial + maskSpeed + targSpeed + (1 | SubjID)
## mp_mxt: RT ~ subjThresh + trial + maskSpeed * targSpeed + (1 | SubjID)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## mp_mpt 7 20243 20298 -10114 20229
## mp_mxt 8 20201 20264 -10092 20185 44.226 1 2.925e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mp_mxt)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ subjThresh + trial + maskSpeed * targSpeed + (1 | SubjID)
## Data: md
##
## REML criterion at convergence: 20242.5
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.8317 -0.6325 -0.0523 0.6124 4.2883
##
## Random effects:
## Groups Name Variance Std.Dev.
## SubjID (Intercept) 0.02669 0.1634
## Residual 0.16318 0.4040
## Number of obs: 19636, groups: SubjID, 12
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 2.0777790 0.0776970 26.74
## subjThresh -0.4304508 0.0652161 -6.60
## trial 0.0138415 0.0004173 33.17
## maskSpeed -0.0097019 0.0020446 -4.75
## targSpeed -0.0075033 0.0023397 -3.21
## maskSpeed:targSpeed -0.0036608 0.0005502 -6.65
##
## Correlation of Fixed Effects:
## (Intr) sbjThr trial mskSpd trgSpd
## subjThresh -0.783
## trial -0.067 0.002
## maskSpeed -0.089 -0.001 0.003
## targSpeed -0.094 -0.003 -0.003 0.667
## mskSpd:trgS 0.075 0.001 -0.007 -0.843 -0.785
2 * (1 - pnorm(abs(data.frame(coef(summary(mp_mxt)))$t.value))) # approx p's
## [1] 0.000000e+00 4.101053e-11 0.000000e+00 2.082402e-06 1.341451e-03
## [6] 2.862044e-11
# Low target speeds
md1 <- md[md$targSpeed==1,]
m1md1 <- lmer(RT~maskSpeed+(1|SubjID), md1)
anova(m1md1)
## Analysis of Variance Table
## Df Sum Sq Mean Sq F value
## maskSpeed 1 9.6138 9.6138 45.889
summary(m1md1)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ maskSpeed + (1 | SubjID)
## Data: md1
##
## REML criterion at convergence: 11817.2
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.4063 -0.6174 -0.0904 0.6070 3.7744
##
## Random effects:
## Groups Name Variance Std.Dev.
## SubjID (Intercept) 0.1116 0.3341
## Residual 0.2095 0.4577
## Number of obs: 9207, groups: SubjID, 12
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.834234 0.096960 18.918
## maskSpeed -0.012367 0.001826 -6.774
##
## Correlation of Fixed Effects:
## (Intr)
## maskSpeed -0.066
2 * (1 - pnorm(abs(data.frame(coef(summary(m1md1)))$t.value))) # approx p's
## [1] 0.000000e+00 1.251577e-11
# High target speeds
md2 <- md[md$targSpeed==5,]
m1md2 <- lmer(RT~maskSpeed+(1|SubjID), md2)
anova(m1md2)
## Analysis of Variance Table
## Df Sum Sq Mean Sq F value
## maskSpeed 1 58.108 58.108 450.02
summary(m1md2)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ maskSpeed + (1 | SubjID)
## Data: md2
##
## REML criterion at convergence: 8341.3
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.9159 -0.5818 -0.0277 0.6264 3.8622
##
## Random effects:
## Groups Name Variance Std.Dev.
## SubjID (Intercept) 0.1612 0.4014
## Residual 0.1291 0.3593
## Number of obs: 10429, groups: SubjID, 12
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.81067 0.11607 15.60
## maskSpeed -0.02842 0.00134 -21.21
##
## Correlation of Fixed Effects:
## (Intr)
## maskSpeed -0.038
2 * (1 - pnorm(abs(data.frame(coef(summary(m1md2)))$t.value))) # approx p's
## [1] 0 0
# Low target speed
fitLin <- lm(RT~maskSpeed, data=md1)
fitSquare <- nls(RT~a+b*maskSpeed^2, data=md1, start=list(a=1,b=0))
summary(fitSquare)
##
## Formula: RT ~ a + b * maskSpeed^2
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 1.9082749 0.0073818 258.512 < 2e-16 ***
## b -0.0015163 0.0002533 -5.987 2.21e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5537 on 9205 degrees of freedom
##
## Number of iterations to convergence: 1
## Achieved convergence tolerance: 1.148e-08
## (2025 observations deleted due to missingness)
anova(fitLin, fitSquare)
## Warning in anova.lmlist(object, ...): models with response '"NULL"' removed
## because response differs from model 1
## Analysis of Variance Table
##
## Response: RT
## Df Sum Sq Mean Sq F value Pr(>F)
## maskSpeed 1 18.53 18.5271 60.596 7.766e-15 ***
## Residuals 9205 2814.43 0.3058
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fitCube <- nls(RT~a+b*maskSpeed^3, data=md1, start=list(a=1,b=0))
summary(fitCube)
##
## Formula: RT ~ a + b * maskSpeed^3
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 1.898e+00 6.844e-03 277.379 < 2e-16 ***
## b -1.485e-04 3.092e-05 -4.801 1.6e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5541 on 9205 degrees of freedom
##
## Number of iterations to convergence: 1
## Achieved convergence tolerance: 1.542e-08
## (2025 observations deleted due to missingness)
anova(fitLin, fitCube)
## Warning in anova.lmlist(object, ...): models with response '"NULL"' removed
## because response differs from model 1
## Analysis of Variance Table
##
## Response: RT
## Df Sum Sq Mean Sq F value Pr(>F)
## maskSpeed 1 18.53 18.5271 60.596 7.766e-15 ***
## Residuals 9205 2814.43 0.3058
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fitQuatric <- nls(RT~a+b*maskSpeed^4, data=md1, start=list(a=1,b=0))
summary(fitQuatric )
##
## Formula: RT ~ a + b * maskSpeed^4
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 1.894e+00 6.623e-03 286.003 < 2e-16 ***
## b -1.573e-05 3.813e-06 -4.126 3.73e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5543 on 9205 degrees of freedom
##
## Number of iterations to convergence: 1
## Achieved convergence tolerance: 9.801e-09
## (2025 observations deleted due to missingness)
anova(fitLin, fitQuatric )
## Warning in anova.lmlist(object, ...): models with response '"NULL"' removed
## because response differs from model 1
## Analysis of Variance Table
##
## Response: RT
## Df Sum Sq Mean Sq F value Pr(>F)
## maskSpeed 1 18.53 18.5271 60.596 7.766e-15 ***
## Residuals 9205 2814.43 0.3058
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# High target speed
fitLin <- lm(RT~maskSpeed, data=md2)
fitSquare <- nls(RT~a+b*maskSpeed^2, data=md2, start=list(a=1,b=0))
summary(fitSquare)
##
## Formula: RT ~ a + b * maskSpeed^2
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 1.8350704 0.0065016 282.25 <2e-16 ***
## b -0.0031312 0.0002244 -13.95 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5231 on 10427 degrees of freedom
##
## Number of iterations to convergence: 1
## Achieved convergence tolerance: 8.638e-10
## (803 observations deleted due to missingness)
anova(fitLin, fitSquare)
## Warning in anova.lmlist(object, ...): models with response '"NULL"' removed
## because response differs from model 1
## Analysis of Variance Table
##
## Response: RT
## Df Sum Sq Mean Sq F value Pr(>F)
## maskSpeed 1 60.29 60.288 220.83 < 2.2e-16 ***
## Residuals 10427 2846.69 0.273
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fitCube <- nls(RT~a+b*maskSpeed^3, data=md2, start=list(a=1,b=0))
summary(fitCube)
##
## Formula: RT ~ a + b * maskSpeed^3
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 1.821e+00 6.051e-03 300.85 <2e-16 ***
## b -3.536e-04 2.744e-05 -12.88 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5239 on 10427 degrees of freedom
##
## Number of iterations to convergence: 1
## Achieved convergence tolerance: 2.927e-09
## (803 observations deleted due to missingness)
anova(fitLin, fitCube)
## Warning in anova.lmlist(object, ...): models with response '"NULL"' removed
## because response differs from model 1
## Analysis of Variance Table
##
## Response: RT
## Df Sum Sq Mean Sq F value Pr(>F)
## maskSpeed 1 60.29 60.288 220.83 < 2.2e-16 ***
## Residuals 10427 2846.69 0.273
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fitQuatric <- nls(RT~a+b*maskSpeed^4, data=md2, start=list(a=1,b=0))
summary(fitQuatric )
##
## Formula: RT ~ a + b * maskSpeed^4
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 1.814e+00 5.870e-03 309.00 <2e-16 ***
## b -4.109e-05 3.389e-06 -12.13 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5243 on 10427 degrees of freedom
##
## Number of iterations to convergence: 1
## Achieved convergence tolerance: 7.627e-10
## (803 observations deleted due to missingness)
anova(fitLin, fitQuatric )
## Warning in anova.lmlist(object, ...): models with response '"NULL"' removed
## because response differs from model 1
## Analysis of Variance Table
##
## Response: RT
## Df Sum Sq Mean Sq F value Pr(>F)
## maskSpeed 1 60.29 60.288 220.83 < 2.2e-16 ***
## Residuals 10427 2846.69 0.273
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
### to compute better starting values for convergence:
# f <- function(x,a,b) {a * exp(b * x)}
# st <- coef(nls(log(RT) ~ log(f(maskSpeed, a, b)), md1, start = c(a=1, b=1)))
# summary(nls(RT ~ f(maskSpeed, a, b), md1, start = st))